home *** CD-ROM | disk | FTP | other *** search
-
- ;
- ; Writing to the hard disk using the ports! by qark
- ; +---------------------------------------+
- ;
- ; The only differences between reading and writing using the ports is
- ; that 30h is sent to the command register, and instead of INSW you
- ; OUTSW.
- ;
- ; I chose to write to sector 2 because some idiot would trash their MBR
- ; by running this.
- ;
-
- mov dx,1f6h ;Drive and head port
- mov al,0a0h ;Drive 0, head 0
- out dx,al
-
- mov dx,1f2h ;Sector count port
- mov al,1 ;Write one sector
- out dx,al
-
- mov dx,1f3h ;Sector number port
- mov al,2 ;Wrote to sector two
- out dx,al
-
- mov dx,1f4h ;Cylinder low port
- mov al,0 ;Cylinder 0
- out dx,al
-
- mov dx,1f5h ;Cylinder high port
- mov al,0 ;The rest of the cylinder 0
- out dx,al
-
- mov dx,1f7h ;Command port
- mov al,30h ;Write with retry.
- out dx,al
- oogle:
- in al,dx
- test al,8 ;Wait for sector buffer ready.
- jz oogle
-
- mov cx,512/2 ;One sector /2
- mov si,offset buffer
- mov dx,1f0h ;Data port - data comes in and out of here.
- rep outsw ;Send it.
-
- ; ------------
-
- mov ax,201h ;We'll read in sector 2 using
- mov bx,offset buffer2 ;int13h and see if we are successful.
- mov cx,2
- mov dx,80h
- int 13h
-
- mov cx,512
- mov si,offset buffer
- mov di,offset buffer2
- repe cmpsb ;Compare the buffers.
- jne failure
-
- mov ah,9
- mov dx,offset write_msg
- int 21h
- jmp w_exit
- failure:
- mov ah,9
- mov dx,offset fail
- int 21h
-
- w_exit:
- mov ax,4c00h ;Exit the program
- int 21h
-
- write_msg db 'Sector two written to using the ports.$'
- fail db 'Writing using ports failed.$'
-
- buffer db 512 dup ('A')
- buffer2 db 512 dup ('D')
-
-
-